Skip to content

feat(physical-plan): generic Rows-backed GroupColumn keeps mixed schemas on the column-wise path#23523

Open
zhuqi-lucas wants to merge 2 commits into
apache:mainfrom
zhuqi-lucas:feat/rows-backed-group-column
Open

feat(physical-plan): generic Rows-backed GroupColumn keeps mixed schemas on the column-wise path#23523
zhuqi-lucas wants to merge 2 commits into
apache:mainfrom
zhuqi-lucas:feat/rows-backed-group-column

Conversation

@zhuqi-lucas

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Today GroupValuesColumn is all-or-nothing: a single nested column in the GROUP BY key (`Struct`, `List`, `FixedSizeList`, …) makes `supported_schema` return `false` and drops the entire aggregation onto the row-wise `GroupValuesRows` fallback — even when every other column would have qualified for the column-wise fast path. For a `GROUP BY int_col, struct_col` shape, the `int_col` pays the row-encoded storage cost for no reason.

What changes are included in this PR?

Add `RowsGroupColumn`: a generic `GroupColumn` backed by a single-field `RowConverter`, wired in as the nested-type dispatch arm of `group_column_supported_type` / `make_group_column`. Native columns keep their type-specialized builders; the nested column pays row-encoding only for its one column.

Gated to `data_type.is_nested()` so intentionally excluded scalar types (Float16, Decimal256) stay on `GroupValuesRows` and the `group_column_supported_type` ⇔ `make_group_column` invariant holds.

Impact

Memory, measured with 4000 groups of `8 × Int64 + 1 × FixedSizeList<Int64, 4>` in `mixed_schema_column_path_uses_less_memory_than_rows_fallback`:

Bytes vs baseline
`GroupValuesRows` (today's fallback) 1096 KB 100%
`GroupValuesColumn` + `RowsGroupColumn` fallback 594 KB 54.2%

Speed: not benchmarked as a headline result — the wins come from native columns keeping their type-specialized `equal_to`/`append_val` fast paths instead of falling back to byte-encoded row comparisons.

Are these changes tested?

Yes:

  • Unit tests inside `row_backed`: FSL / Struct roundtrip, `take_n`, `supports_type` matches `RowConverter::supports_fields`.
  • `mixed_schema_column_path_uses_less_memory_than_rows_fallback` (mod.rs): the 54.2% memory claim + identical group assignment vs `GroupValuesRows`.
  • `nested_float_edge_cases_match_rows_fallback`: nested `-0.0` / `NaN` produce the same groupings as `GroupValuesRows` (the correctness invariant to watch, since hashing runs on the raw column and equality runs on the row bytes).
  • `multi_batch_and_emit_first_matches_rows_fallback`: multi-batch streaming intern + `EmitTo::First` + `take_n`.

All 39 tests in `aggregates::group_values` pass.

Are there any user-facing changes?

No — internal aggregation representation only. Same query results, lower memory footprint on mixed-schema GROUP BY keys.

Follow-ups (out of scope)

…d schemas on the column-wise path

Add `RowsGroupColumn`, a generic `GroupColumn` backed by a
single-field `RowConverter` from arrow's row format. Route nested
types (`Struct`, `List`, `LargeList`, `FixedSizeList`, and
recursive combinations arrow's row converter can encode) to it via
`group_column_supported_type` / `make_group_column`.

Before this, a single nested column in a GROUP BY key made
`supported_schema` return `false` and the whole aggregation fell
back to the row-wise `GroupValuesRows`, even when every other
column would have qualified for the column-wise fast path. With
the generic fallback, only the nested column pays the row-encoding
cost; the native columns keep their compact column-wise storage.

Impact (measured by `mixed_schema_column_path_uses_less_memory_than_rows_fallback`
with 4000 groups of `8 × Int64 + 1 × FixedSizeList<Int64, 4>`):
- old (all-rows fallback): 1096 KB
- new (column-wise + row-backed nested column): **594 KB (54.2%)**

Correctness:
- Hashing (`create_hashes` on the raw input columns) already
  supports nested types, and the caller-side `-0.0/NaN`
  normalization performed for `GroupValuesRows` keeps hashing
  aligned with the row-format equality this column implements.
  Covered by `nested_float_edge_cases_match_rows_fallback`.
- Multi-batch streaming intern + `EmitTo::First` / `take_n`
  covered by `multi_batch_and_emit_first_matches_rows_fallback`.
- FSL / Struct roundtrip + `supports_type` invariant covered by
  the unit tests inside `row_backed`.

Follow-ups tracked separately:
- Cover types `RowConverter` cannot encode (currently a moving
  target; if the arrow-rs release DataFusion pins encodes them
  all — including Map — the fallback is complete).
- With full coverage, retire `GroupValuesRows` entirely
  (motivation: apache#23404).

Refs: apache#23404, apache#22715.
Copilot AI review requested due to automatic review settings July 13, 2026 02:41
@github-actions github-actions Bot added the physical-plan Changes to the physical-plan crate label Jul 13, 2026
@zhuqi-lucas zhuqi-lucas requested review from adriangb and alamb July 13, 2026 02:41
@zhuqi-lucas zhuqi-lucas requested a review from kosiew July 13, 2026 02:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves GroupValuesColumn mixed-schema GROUP BY handling by adding a generic row-format-backed GroupColumn for nested types, so only unsupported (nested) columns pay row-encoding overhead instead of forcing the entire key onto the GroupValuesRows fallback.

Changes:

  • Introduces RowsGroupColumn, a generic GroupColumn backed by Arrow’s row format for nested (row-encodable) types.
  • Updates the group_column_supported_type / make_group_column dispatch so nested types use RowsGroupColumn while intentionally excluded scalar types remain on GroupValuesRows.
  • Adds unit and integration-style tests validating correctness (including float edge cases) and reduced memory usage for mixed schemas.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
datafusion/physical-plan/src/aggregates/group_values/row.rs Documents and exposes dictionary_encode_if_necessary for reuse by the new row-backed column path.
datafusion/physical-plan/src/aggregates/group_values/multi_group_by/row_backed.rs Adds RowsGroupColumn implementation and unit tests for nested types via Arrow row encoding.
datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs Wires nested-type fallback into supported-type checks and factory dispatch; adds mixed-schema memory/correctness tests.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +111 to +123
fn rows_to_array<'a>(
&self,
rows: impl IntoIterator<Item = arrow::row::Row<'a>>,
) -> ArrayRef {
let mut arrays = self
.row_converter
.convert_rows(rows)
.expect("row conversion during emit");
debug_assert_eq!(arrays.len(), 1, "single-field row converter");
let array = arrays.swap_remove(0);
dictionary_encode_if_necessary(&array, &self.output_type)
.expect("dictionary re-encode during emit")
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 132905e — extended the recursion in encode_array_if_necessary to also cover FixedSizeList, LargeList, and Map (parallel to the existing List branch). Added build_preserves_list_of_dictionary_schema as a regression test.

Side note: I discovered while writing tests that RowConverter::convert_rows currently rejects FixedSizeList<Dict> in arrow-rs itself (before our helper runs), so that specific nesting is unreachable through supports_type today. The new FSL branch is defensive coverage for parity with List in case that limitation lifts.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small correction to my previous reply — I was imprecise about what supports_type does for FixedSizeList<Dict>.

Actual behavior in current arrow-rs: supports_datatype recurses through FixedSizeList into its inner field and hits _ if !d.is_nested() on the Dict leaf, which returns true — so RowsGroupColumn::supports_type(FixedSizeList<Dict<Int32,Utf8>>) does return true. What actually fails is later, inside RowConverter::convert_rows, which panics with "FixedSizeListArray expected data type Dictionary(Int32,Utf8) got Utf8 for 'item'" because arrow-rs constructs the outer FSL against the declared element field but produces flat Utf8 values.

So more accurately: FSL/LargeList/Map pass supports_type but blow up at convert_rows in this arrow-rs version. The FSL / LargeList / Map branches in encode_array_if_necessary are defensive coverage for parity with List — they'll do the right thing once arrow-rs's roundtrip is fixed. The regression test uses List<Dict> because that's the currently-roundtrippable path.

@Rich-T-kid

Copy link
Copy Markdown
Contributor

nice! excited to take a look at this

@Rich-T-kid

Copy link
Copy Markdown
Contributor

Speed: not benchmarked as a headline result — the wins come from native columns keeping their type-specialized equal_to/append_val fast paths instead of falling back to byte-encoded row comparisons.

I think speed is an important piece of this PR — could we at least run the existing benchmarks? IIRC the TPC-H/ClickBench/etc benchmarks don't actually include certain data types, such as dictionaries and FixedSizeList, so they may not be the best indicator of performance. But they should at least give us a ballpark sense of whether this causes a regression.

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took a first pass through, mostly looks good. I left some comments. would be happy to take another look.

/// Re-apply dictionary / run-end encoding to `array` so it matches `expected`.
///
/// Arrow's [`RowConverter`] decodes dictionary and run-end-encoded values to
/// their plain value type on the way out, so any group-value array produced

@Rich-T-kid Rich-T-kid Jul 13, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arrow's [RowConverter] decodes dictionary and run-end-encoded values to
their plain value type on the way out

nit: RowConverter decodes dictionarys/REE on their way in since it occurs onRowConverter::append().

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, thanks. Fixed the doc in 132905e to say 'flattens dict/REE values during row encoding (at append)' instead of 'on the way out'.

/// being returned. Shared with the generic row-backed `GroupColumn`.
///
/// [`RowConverter`]: arrow::row::RowConverter
pub(crate) fn dictionary_encode_if_necessary(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the comment above mentions casting arrays to REE but the functions is called Dictionary_encode_if_necessary.

Suggested change
pub(crate) fn dictionary_encode_if_necessary(
pub(crate) fn encode_array_if_necessary(

or something of the sort

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renamed to encode_array_if_necessary in 132905e.

Comment on lines +273 to +275
/// their plain value type on the way out, so any group-value array produced
/// from the row format must be re-encoded to the schema's expected type before
/// being returned. Shared with the generic row-backed `GroupColumn`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the cast here shows that Dictionaries and REE arrays should have their own specialized implementation of GroupColumn. For now I think its fine but unlike other implementations like fixedSizeList that can go from

arrow-array -> RowFormat -> arrow-array

dictionary/REE need an extra cast step

arrow-array -> rowFormat -> arrow-array -> (cast) -> arrow-array

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed — filing as a follow-up so this PR stays scoped to 'keep mixed nested schemas on the column-wise path'. A dedicated DictGroupColumn / ReeGroupColumn would skip the row-encode → cast round-trip entirely, which is a nice next step.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#23187 implements the dictionary version of this if your interested

Comment on lines +931 to +936
// encode them. Gate the fallback to nested types so intentionally-excluded
// scalar types (e.g. Float16, Decimal256) stay on `GroupValuesRows` and the
// `group_column_supported_type` ⇔ `make_group_column` invariant holds.
if data_type.is_nested() {
return RowsGroupColumn::supports_type(data_type);
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are Float16 & Decimal256 arrays not supported for this optimization?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make_group_column doesn't have a type-specialized PrimitiveGroupValueBuilder branch for them — they'd need Float16Type / Decimal256Type wired through the same pattern as Float32Type / Int32Type / etc. We could alternatively route them through RowsGroupColumn by relaxing the is_nested() gate, but I kept this PR scoped to nested types so the group_column_supported_type ⇔ make_group_column biconditional stays clean. Happy to file a follow-up either way if that's useful.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense to me 👍

Comment on lines +1380 to +1384
assert!(
column_size < rows_size,
"expected column-wise path ({column_size}) to use less memory than \
the all-rows fallback ({rows_size})"
);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a nice way to guarantee groupColumns will always consume less memory than the GroupValueRows implementation!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! 🙂

Comment on lines +1396 to +1414
/// Relabel a group-index vector so labels are assigned in order of first
/// appearance. Two vectors are equivalent groupings iff their canonical
/// forms are equal — this ignores the (opaque, non-semantic) difference in
/// group-index numbering between the vectorized column path and the
/// sequential rows fallback.
fn canonical_grouping(groups: &[usize]) -> Vec<usize> {
let mut map = HashMap::new();
let mut next = 0usize;
groups
.iter()
.map(|&g| {
*map.entry(g).or_insert_with(|| {
let v = next;
next += 1;
v
})
})
.collect()
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This took me a bit of time to understand why its needed. from my understanding its because GroupValues::intern() doesn't specify the order in which new IDs are given. docs

I think the comment is fine as it is but maybe adding something like

GroupValues implementations only guarantee that equal rows receive
/// equal group ids and new rows receive a fresh id — the order in which
/// new ids are handed out is not part of the contract, and can differ
/// between correct implementations

can help readers know why this function has to exist. This is mostly a nit

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point — expanded the doc in 132905e to spell out that GroupValues::intern deliberately does not fix the order of fresh group-ids, and canonicalizing before comparison is what lets us assert equivalence between the vectorized column path and the sequential rows fallback.

Comment on lines +35 to +36
//! and only pays the row-encoding cost on `struct_col`, instead of dragging the
//! entire key onto `GroupValuesRows`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
//! and only pays the row-encoding cost on `struct_col`, instead of dragging the
//! entire key onto `GroupValuesRows`.
//! and only pays the row-encoding cost on `struct_col`, instead of dragging both
//! columns onto `GroupValuesRows`.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 132905e.

Comment on lines +115 to +118
let mut arrays = self
.row_converter
.convert_rows(rows)
.expect("row conversion during emit");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may be interested in these issues/ PR in arrow-rs

apache/arrow-rs#10275
apache/arrow-rs#10319

@zhuqi-lucas zhuqi-lucas Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're about skipping utf8 validation in RowParser, not about the dict/REE re-encoding path. The connection to this PR is that RowsGroupColumn runs everything through RowConverter (built on RowParser), so once the validate_utf8 = false opt-out lands upstream we could plumb it through for a small row-encode speedup on string / binary group keys. Won't block on it here — good to keep on the radar though, thanks for the pointer.

}

fn take_n(&mut self, n: usize) -> ArrayRef {
debug_assert!(n <= self.group_values.num_rows());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does DataFusion guarantee that it wont call GroupValues::emit(emit::to(n)) where n is possibly greater than the number of groups?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. aggregates/order/mod.rs:80 always emits EmitTo::First(n.min(max)), and every other GroupColumn::take_n impl (bytes.rs, bytes_view.rs, boolean.rs, primitive.rs) has the same debug_assert!(self.len() >= n). So the assert is defensive documentation of the caller-side invariant, matching the existing convention.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correcting my previous reply — I overstated things and re-checked:

  • Only bytes.rs and bytes_view.rs have the explicit debug_assert!(self.len() >= n); boolean.rs and primitive.rs don't (they just rely on Vec-slice / BooleanBuffer-slice semantics which panic on out-of-bounds).
  • The n.min(max) cap is only in the GroupOrdering::Partial | Full arm of oom_emit_to; the GroupOrdering::None arm passes n through unchecked (order/mod.rs:77).

So the actual guarantee is caller-side: the aggregate stream computes n from either the number of finalized-order groups (Partial/Full) or the group table's own row count (None), both of which are bounded by the values we've interned so far. The debug_assert! in take_n is a defensive documentation of that invariant, consistent with the existing bytes.rs / bytes_view.rs pattern; it's not a universal convention across every GroupColumn impl. Happy to drop it if you'd prefer we match the leaner style in boolean.rs / primitive.rs.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its fine as it is

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

I took a first pass through, mostly looks good. I left some comments. would be happy to take another look.

Thanks @Rich-T-kid for review, will look into your review comments and address it.

Fixes from @Rich-T-kid and @copilot-pull-request-reviewer:

* row.rs: correct the doc on `encode_array_if_necessary` — arrow's
  `RowConverter` flattens dictionary / REE values at `append()` (during
  row encoding), not "on the way out".

* row.rs: extend the recursion in `encode_array_if_necessary` to cover
  `FixedSizeList`, `LargeList`, and `Map` in addition to `Struct` and
  `List`. Without this, a nested key like `List<Dict<Int32, Utf8>>`
  emits as `List<Utf8>` because the fallback arm just clones the
  RowConverter-flattened array, giving a data-type mismatch against the
  declared output type.

* row.rs: rename `dictionary_encode_if_necessary` → `encode_array_if_necessary`
  since the helper also handles run-end encoding (and now the nested
  container walks around them).

* row_backed.rs: add `build_preserves_list_of_dictionary_schema` — a
  round-trip regression test that appends a `List<Dict<Int32, Utf8>>`
  row via `RowsGroupColumn` and asserts the built array's data type
  matches the declared schema (would fail with the pre-fix helper).

* multi_group_by/mod.rs: expand the doc on `canonical_grouping` to
  spell out that the `GroupValues` trait deliberately does not fix the
  order in which fresh group-ids are assigned — canonicalizing before
  comparison is what lets the vectorized column path and the sequential
  rows fallback be asserted equivalent.

* row_backed.rs (module doc): reword "instead of dragging the entire
  key onto GroupValuesRows" → "instead of dragging both columns onto
  GroupValuesRows" per Rich-T-kid's suggestion diff.
@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmarks

@apache apache deleted a comment from adriangbot Jul 14, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4969922043-1056-6qc7g 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing feat/rows-backed-group-column (132905e) to 761f7f6 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4969922043-1057-tp9zc 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing feat/rows-backed-group-column (132905e) to 761f7f6 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4969922043-1055-9j6pp 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing feat/rows-backed-group-column (132905e) to 761f7f6 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and feat_rows-backed-group-column
--------------------
Benchmark dict.json
--------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query                             ┃                           HEAD ┃  feat_rows-backed-group-column ┃    Change ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Qgroup_by_utf8_card5_no_nulls     │ 17.27 / 18.02 ±1.00 / 20.00 ms │ 16.26 / 17.38 ±1.23 / 19.77 ms │ no change │
│ Qgroup_by_utf8_card10_no_nulls    │ 21.30 / 22.20 ±0.81 / 23.70 ms │ 21.25 / 21.95 ±0.58 / 22.96 ms │ no change │
│ Qgroup_by_utf8_card25_no_nulls    │ 62.35 / 64.22 ±1.19 / 65.72 ms │ 62.06 / 63.95 ±1.36 / 65.39 ms │ no change │
│ Qgroup_by_utf8_card5_null15       │ 16.95 / 17.17 ±0.14 / 17.36 ms │ 16.04 / 16.73 ±0.59 / 17.48 ms │ no change │
│ Qgroup_by_utf8_card25_null15      │ 58.55 / 61.07 ±2.22 / 65.10 ms │ 59.56 / 60.27 ±0.43 / 60.75 ms │ no change │
│ Qgroup_by_two_utf8_card5_no_nulls │ 36.17 / 37.65 ±1.33 / 39.92 ms │ 36.49 / 37.13 ±0.40 / 37.65 ms │ no change │
│ Qgroup_by_two_utf8_card25_null15  │ 77.29 / 80.40 ±2.10 / 83.75 ms │ 78.10 / 79.93 ±1.61 / 81.89 ms │ no change │
└───────────────────────────────────┴────────────────────────────────┴────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                            ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 300.73ms │
│ Total Time (feat_rows-backed-group-column)   │ 297.34ms │
│ Average Time (HEAD)                          │  42.96ms │
│ Average Time (feat_rows-backed-group-column) │  42.48ms │
│ Queries Faster                               │        0 │
│ Queries Slower                               │        0 │
│ Queries with No Change                       │        7 │
│ Queries with Failure                         │        0 │
└──────────────────────────────────────────────┴──────────┘

Resource Usage

dict — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 808.4 MiB
Avg memory 134.8 MiB
CPU user 0.0s
CPU sys 0.0s
Peak spill 0 B

dict — branch

Metric Value
Wall time 5.0s
Peak memory 798.3 MiB
Avg memory 133.1 MiB
CPU user 0.0s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and feat_rows-backed-group-column
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃  feat_rows-backed-group-column ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.74 / 39.99 ±1.44 / 41.88 ms │ 38.30 / 38.99 ±0.99 / 40.95 ms │    no change │
│ QQuery 2  │ 19.01 / 19.38 ±0.28 / 19.86 ms │ 19.12 / 19.37 ±0.16 / 19.55 ms │    no change │
│ QQuery 3  │ 31.58 / 33.66 ±1.40 / 35.98 ms │ 30.73 / 32.99 ±1.82 / 35.95 ms │    no change │
│ QQuery 4  │ 17.27 / 17.44 ±0.13 / 17.60 ms │ 17.21 / 17.63 ±0.52 / 18.61 ms │    no change │
│ QQuery 5  │ 37.94 / 41.08 ±1.96 / 44.04 ms │ 40.19 / 40.56 ±0.35 / 41.16 ms │    no change │
│ QQuery 6  │ 16.21 / 16.47 ±0.31 / 17.09 ms │ 16.25 / 16.52 ±0.23 / 16.87 ms │    no change │
│ QQuery 7  │ 44.30 / 46.42 ±2.20 / 50.30 ms │ 43.63 / 45.12 ±1.02 / 46.79 ms │    no change │
│ QQuery 8  │ 43.44 / 44.06 ±0.75 / 45.49 ms │ 42.91 / 43.27 ±0.24 / 43.67 ms │    no change │
│ QQuery 9  │ 50.11 / 50.66 ±0.61 / 51.63 ms │ 50.18 / 50.92 ±0.60 / 51.93 ms │    no change │
│ QQuery 10 │ 42.22 / 42.38 ±0.16 / 42.65 ms │ 41.79 / 42.22 ±0.38 / 42.92 ms │    no change │
│ QQuery 11 │ 13.29 / 13.76 ±0.76 / 15.28 ms │ 13.28 / 13.49 ±0.17 / 13.69 ms │    no change │
│ QQuery 12 │ 23.96 / 24.29 ±0.31 / 24.68 ms │ 24.13 / 24.40 ±0.18 / 24.70 ms │    no change │
│ QQuery 13 │ 32.06 / 33.00 ±1.14 / 35.07 ms │ 33.59 / 35.23 ±1.54 / 38.04 ms │ 1.07x slower │
│ QQuery 14 │ 23.69 / 24.07 ±0.20 / 24.29 ms │ 23.69 / 23.79 ±0.11 / 23.98 ms │    no change │
│ QQuery 15 │ 30.94 / 31.56 ±0.60 / 32.57 ms │ 30.90 / 31.53 ±0.96 / 33.42 ms │    no change │
│ QQuery 16 │ 13.58 / 13.85 ±0.16 / 14.07 ms │ 13.93 / 14.21 ±0.17 / 14.44 ms │    no change │
│ QQuery 17 │ 72.83 / 73.65 ±0.59 / 74.42 ms │ 73.36 / 74.52 ±1.15 / 76.71 ms │    no change │
│ QQuery 18 │ 58.72 / 61.14 ±1.85 / 63.82 ms │ 60.44 / 61.11 ±0.68 / 62.14 ms │    no change │
│ QQuery 19 │ 33.61 / 34.19 ±0.64 / 35.13 ms │ 33.07 / 33.38 ±0.32 / 33.93 ms │    no change │
│ QQuery 20 │ 32.25 / 32.90 ±0.75 / 34.36 ms │ 31.65 / 32.02 ±0.46 / 32.93 ms │    no change │
│ QQuery 21 │ 54.00 / 56.04 ±1.63 / 58.86 ms │ 55.46 / 56.49 ±0.84 / 57.93 ms │    no change │
│ QQuery 22 │ 13.73 / 14.20 ±0.43 / 14.96 ms │ 13.49 / 13.87 ±0.26 / 14.18 ms │    no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                            ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 764.19ms │
│ Total Time (feat_rows-backed-group-column)   │ 761.64ms │
│ Average Time (HEAD)                          │  34.74ms │
│ Average Time (feat_rows-backed-group-column) │  34.62ms │
│ Queries Faster                               │        0 │
│ Queries Slower                               │        1 │
│ Queries with No Change                       │       21 │
│ Queries with Failure                         │        0 │
└──────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.1 GiB
Avg memory 491.9 MiB
CPU user 22.2s
CPU sys 1.7s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 511.5 MiB
CPU user 22.1s
CPU sys 1.5s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and feat_rows-backed-group-column
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃          feat_rows-backed-group-column ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.23 / 5.74 ±0.94 / 7.61 ms │            5.36 / 5.86 ±0.85 / 7.56 ms │     no change │
│ QQuery 2  │        79.93 / 80.51 ±0.58 / 81.60 ms │         81.05 / 81.31 ±0.25 / 81.76 ms │     no change │
│ QQuery 3  │        28.95 / 29.27 ±0.19 / 29.47 ms │         29.52 / 29.70 ±0.25 / 30.18 ms │     no change │
│ QQuery 4  │     477.37 / 480.49 ±4.10 / 488.49 ms │      482.60 / 486.86 ±3.22 / 490.43 ms │     no change │
│ QQuery 5  │        50.70 / 51.58 ±0.67 / 52.52 ms │         51.84 / 52.01 ±0.16 / 52.30 ms │     no change │
│ QQuery 6  │        35.30 / 36.00 ±0.48 / 36.65 ms │         36.01 / 36.54 ±0.47 / 37.29 ms │     no change │
│ QQuery 7  │        93.96 / 94.81 ±0.75 / 95.68 ms │         94.32 / 94.68 ±0.20 / 94.93 ms │     no change │
│ QQuery 8  │        36.45 / 38.18 ±2.43 / 42.93 ms │         36.66 / 38.59 ±3.15 / 44.86 ms │     no change │
│ QQuery 9  │        53.31 / 56.00 ±1.83 / 58.95 ms │         53.55 / 54.62 ±0.80 / 55.59 ms │     no change │
│ QQuery 10 │        66.59 / 67.04 ±0.37 / 67.60 ms │         63.40 / 63.63 ±0.17 / 63.89 ms │ +1.05x faster │
│ QQuery 11 │    314.09 / 351.25 ±20.59 / 372.45 ms │      296.92 / 299.21 ±2.16 / 302.90 ms │ +1.17x faster │
│ QQuery 12 │        28.52 / 28.88 ±0.21 / 29.13 ms │         28.40 / 28.88 ±0.35 / 29.36 ms │     no change │
│ QQuery 13 │     117.96 / 120.79 ±2.69 / 124.08 ms │      117.95 / 118.61 ±0.56 / 119.36 ms │     no change │
│ QQuery 14 │     408.18 / 413.57 ±3.41 / 417.39 ms │      410.61 / 416.31 ±5.92 / 424.21 ms │     no change │
│ QQuery 15 │        57.14 / 57.54 ±0.32 / 57.95 ms │         57.94 / 58.55 ±0.56 / 59.40 ms │     no change │
│ QQuery 16 │           6.42 / 6.60 ±0.22 / 7.04 ms │            6.47 / 6.60 ±0.14 / 6.88 ms │     no change │
│ QQuery 17 │        79.54 / 80.71 ±1.56 / 83.67 ms │         81.09 / 82.84 ±1.85 / 86.26 ms │     no change │
│ QQuery 18 │     122.35 / 124.87 ±3.81 / 132.46 ms │      125.83 / 131.82 ±5.22 / 141.03 ms │  1.06x slower │
│ QQuery 19 │        41.37 / 42.40 ±1.09 / 44.30 ms │         44.35 / 44.68 ±0.19 / 44.90 ms │  1.05x slower │
│ QQuery 20 │        35.15 / 35.45 ±0.36 / 36.11 ms │         38.49 / 40.11 ±1.65 / 42.83 ms │  1.13x slower │
│ QQuery 21 │        17.31 / 17.92 ±0.76 / 19.41 ms │         19.11 / 19.36 ±0.22 / 19.73 ms │  1.08x slower │
│ QQuery 22 │        62.83 / 63.72 ±0.55 / 64.50 ms │         71.24 / 72.46 ±0.98 / 74.04 ms │  1.14x slower │
│ QQuery 23 │     340.65 / 343.06 ±2.17 / 346.52 ms │     340.91 / 359.35 ±16.89 / 387.82 ms │     no change │
│ QQuery 24 │     223.07 / 226.06 ±3.44 / 232.34 ms │      225.92 / 233.98 ±9.44 / 252.39 ms │     no change │
│ QQuery 25 │     108.53 / 111.14 ±2.82 / 116.50 ms │      110.44 / 111.60 ±1.01 / 113.30 ms │     no change │
│ QQuery 26 │        57.49 / 58.20 ±1.07 / 60.31 ms │         57.55 / 58.79 ±1.02 / 60.36 ms │     no change │
│ QQuery 27 │           5.94 / 6.09 ±0.24 / 6.58 ms │            6.11 / 6.20 ±0.17 / 6.54 ms │     no change │
│ QQuery 28 │        55.63 / 59.65 ±2.02 / 61.01 ms │         56.95 / 59.97 ±2.40 / 62.83 ms │     no change │
│ QQuery 29 │       96.17 / 98.93 ±3.55 / 105.84 ms │        96.66 / 98.61 ±1.60 / 101.13 ms │     no change │
│ QQuery 30 │        31.97 / 32.72 ±1.09 / 34.87 ms │         32.17 / 33.27 ±0.95 / 34.90 ms │     no change │
│ QQuery 31 │     111.28 / 111.73 ±0.31 / 112.20 ms │      111.60 / 112.18 ±0.58 / 113.04 ms │     no change │
│ QQuery 32 │        20.01 / 20.25 ±0.36 / 20.96 ms │         20.18 / 20.28 ±0.13 / 20.53 ms │     no change │
│ QQuery 33 │        37.31 / 37.82 ±0.29 / 38.16 ms │         37.30 / 39.11 ±3.01 / 45.12 ms │     no change │
│ QQuery 34 │         9.77 / 10.14 ±0.35 / 10.75 ms │          9.79 / 10.01 ±0.20 / 10.27 ms │     no change │
│ QQuery 35 │        72.35 / 72.99 ±0.52 / 73.93 ms │         72.02 / 72.53 ±0.29 / 72.93 ms │     no change │
│ QQuery 36 │           5.56 / 5.69 ±0.17 / 6.02 ms │            5.70 / 5.85 ±0.21 / 6.27 ms │     no change │
│ QQuery 37 │           6.72 / 6.86 ±0.11 / 7.01 ms │            6.78 / 6.91 ±0.16 / 7.20 ms │     no change │
│ QQuery 38 │        61.34 / 61.95 ±0.42 / 62.48 ms │         62.67 / 63.16 ±0.31 / 63.62 ms │     no change │
│ QQuery 39 │        88.53 / 91.38 ±3.44 / 97.95 ms │         91.91 / 92.53 ±0.55 / 93.52 ms │     no change │
│ QQuery 40 │        23.12 / 23.42 ±0.18 / 23.60 ms │         23.45 / 23.94 ±0.29 / 24.37 ms │     no change │
│ QQuery 41 │        11.32 / 11.47 ±0.13 / 11.65 ms │         11.72 / 11.93 ±0.21 / 12.30 ms │     no change │
│ QQuery 42 │        23.78 / 24.43 ±0.54 / 25.19 ms │         23.91 / 24.36 ±0.41 / 24.98 ms │     no change │
│ QQuery 43 │           4.80 / 4.91 ±0.17 / 5.26 ms │            4.98 / 5.07 ±0.16 / 5.38 ms │     no change │
│ QQuery 44 │           8.94 / 9.08 ±0.12 / 9.27 ms │            9.02 / 9.21 ±0.13 / 9.44 ms │     no change │
│ QQuery 45 │        36.87 / 37.37 ±0.26 / 37.55 ms │         37.77 / 38.30 ±0.54 / 39.07 ms │     no change │
│ QQuery 46 │        11.67 / 12.77 ±1.74 / 16.23 ms │         11.81 / 12.92 ±1.38 / 15.63 ms │     no change │
│ QQuery 47 │     222.26 / 229.61 ±7.23 / 242.05 ms │      227.65 / 230.28 ±3.11 / 235.65 ms │     no change │
│ QQuery 48 │        96.12 / 96.84 ±0.68 / 97.94 ms │        97.70 / 98.54 ±1.07 / 100.63 ms │     no change │
│ QQuery 49 │        75.86 / 77.37 ±2.56 / 82.49 ms │         77.00 / 79.66 ±3.96 / 87.56 ms │     no change │
│ QQuery 50 │        58.32 / 59.99 ±1.43 / 62.57 ms │         60.38 / 60.74 ±0.42 / 61.53 ms │     no change │
│ QQuery 51 │        93.11 / 94.02 ±0.73 / 94.86 ms │         92.70 / 94.66 ±1.71 / 97.26 ms │     no change │
│ QQuery 52 │        25.31 / 25.73 ±0.30 / 26.25 ms │         24.03 / 24.45 ±0.27 / 24.82 ms │     no change │
│ QQuery 53 │        30.42 / 32.87 ±3.16 / 39.11 ms │         29.88 / 31.59 ±2.42 / 36.34 ms │     no change │
│ QQuery 54 │        58.33 / 58.91 ±0.38 / 59.42 ms │         56.22 / 57.12 ±0.77 / 58.51 ms │     no change │
│ QQuery 55 │        24.49 / 24.90 ±0.27 / 25.26 ms │         23.54 / 23.91 ±0.30 / 24.31 ms │     no change │
│ QQuery 56 │        41.09 / 41.88 ±0.64 / 42.65 ms │         39.33 / 40.06 ±0.63 / 41.17 ms │     no change │
│ QQuery 57 │     187.87 / 190.04 ±2.13 / 194.07 ms │      178.34 / 180.34 ±1.83 / 183.71 ms │ +1.05x faster │
│ QQuery 58 │     119.27 / 120.60 ±0.97 / 121.86 ms │      116.44 / 117.62 ±1.01 / 118.90 ms │     no change │
│ QQuery 59 │     121.66 / 122.50 ±0.64 / 123.59 ms │      120.40 / 121.01 ±0.50 / 121.80 ms │     no change │
│ QQuery 60 │        41.82 / 42.13 ±0.26 / 42.53 ms │         39.56 / 40.06 ±0.42 / 40.75 ms │     no change │
│ QQuery 61 │        12.95 / 13.09 ±0.16 / 13.40 ms │         12.14 / 13.08 ±1.78 / 16.64 ms │     no change │
│ QQuery 62 │        48.63 / 49.44 ±1.10 / 51.61 ms │         47.35 / 48.17 ±1.21 / 50.58 ms │     no change │
│ QQuery 63 │        30.81 / 31.22 ±0.51 / 32.21 ms │         29.93 / 30.68 ±0.43 / 31.12 ms │     no change │
│ QQuery 64 │     429.84 / 437.35 ±6.97 / 450.11 ms │     415.86 / 433.47 ±14.49 / 451.40 ms │     no change │
│ QQuery 65 │     154.35 / 161.03 ±3.90 / 165.26 ms │      156.21 / 160.25 ±3.00 / 163.43 ms │     no change │
│ QQuery 66 │        84.29 / 85.12 ±0.88 / 86.66 ms │         85.60 / 86.46 ±0.71 / 87.66 ms │     no change │
│ QQuery 67 │     264.70 / 271.68 ±5.83 / 282.13 ms │      279.97 / 282.15 ±1.54 / 283.83 ms │     no change │
│ QQuery 68 │        12.50 / 12.70 ±0.12 / 12.88 ms │         12.86 / 13.05 ±0.16 / 13.25 ms │     no change │
│ QQuery 69 │        59.82 / 60.39 ±0.47 / 60.94 ms │         60.31 / 62.25 ±2.59 / 67.38 ms │     no change │
│ QQuery 70 │     107.03 / 111.08 ±6.87 / 124.79 ms │      114.45 / 117.68 ±3.08 / 121.84 ms │  1.06x slower │
│ QQuery 71 │        35.57 / 36.07 ±0.38 / 36.60 ms │         37.16 / 37.88 ±0.55 / 38.84 ms │  1.05x slower │
│ QQuery 72 │ 2130.04 / 2278.81 ±81.69 / 2356.17 ms │ 2264.51 / 2372.14 ±104.57 / 2560.55 ms │     no change │
│ QQuery 73 │          9.39 / 9.61 ±0.25 / 10.08 ms │         10.34 / 10.49 ±0.14 / 10.70 ms │  1.09x slower │
│ QQuery 74 │     170.37 / 171.54 ±1.28 / 173.58 ms │      195.14 / 198.48 ±3.07 / 203.68 ms │  1.16x slower │
│ QQuery 75 │     147.23 / 149.62 ±1.90 / 152.22 ms │      153.35 / 155.98 ±2.92 / 161.24 ms │     no change │
│ QQuery 76 │        34.81 / 35.21 ±0.34 / 35.82 ms │         35.67 / 36.90 ±1.44 / 39.60 ms │     no change │
│ QQuery 77 │        60.86 / 61.28 ±0.27 / 61.69 ms │         60.83 / 61.87 ±0.73 / 63.00 ms │     no change │
│ QQuery 78 │     193.47 / 197.60 ±3.51 / 202.83 ms │      197.07 / 200.40 ±3.35 / 206.82 ms │     no change │
│ QQuery 79 │        66.56 / 68.67 ±2.30 / 72.57 ms │         66.92 / 68.13 ±1.49 / 71.03 ms │     no change │
│ QQuery 80 │      98.41 / 100.11 ±1.70 / 103.30 ms │       99.40 / 102.11 ±2.58 / 105.34 ms │     no change │
│ QQuery 81 │        25.57 / 25.74 ±0.15 / 25.92 ms │         25.90 / 26.34 ±0.25 / 26.66 ms │     no change │
│ QQuery 82 │        16.17 / 16.54 ±0.30 / 17.05 ms │         16.55 / 16.82 ±0.15 / 17.00 ms │     no change │
│ QQuery 83 │        41.57 / 44.91 ±2.65 / 49.66 ms │         39.97 / 41.35 ±2.45 / 46.24 ms │ +1.09x faster │
│ QQuery 84 │        31.92 / 32.94 ±1.11 / 35.05 ms │         30.40 / 30.65 ±0.22 / 30.94 ms │ +1.07x faster │
│ QQuery 85 │     111.91 / 112.87 ±0.85 / 114.13 ms │      107.31 / 110.43 ±2.87 / 114.36 ms │     no change │
│ QQuery 86 │        26.81 / 27.27 ±0.47 / 28.08 ms │         25.19 / 25.86 ±0.75 / 27.14 ms │ +1.05x faster │
│ QQuery 87 │        70.10 / 73.70 ±5.66 / 84.88 ms │         62.91 / 63.38 ±0.41 / 64.03 ms │ +1.16x faster │
│ QQuery 88 │        62.79 / 64.34 ±1.61 / 67.11 ms │         63.97 / 64.21 ±0.18 / 64.49 ms │     no change │
│ QQuery 89 │        35.40 / 35.94 ±0.29 / 36.19 ms │         36.21 / 36.86 ±0.74 / 38.25 ms │     no change │
│ QQuery 90 │        16.95 / 17.06 ±0.09 / 17.21 ms │         17.14 / 17.32 ±0.21 / 17.67 ms │     no change │
│ QQuery 91 │        45.98 / 47.10 ±1.80 / 50.63 ms │         44.97 / 45.96 ±0.62 / 46.69 ms │     no change │
│ QQuery 92 │        29.03 / 30.27 ±1.76 / 33.75 ms │         29.35 / 30.01 ±0.58 / 30.76 ms │     no change │
│ QQuery 93 │        49.45 / 50.47 ±1.24 / 52.88 ms │         49.62 / 50.90 ±1.06 / 52.73 ms │     no change │
│ QQuery 94 │        37.67 / 38.19 ±0.39 / 38.86 ms │         38.38 / 39.46 ±1.85 / 43.15 ms │     no change │
│ QQuery 95 │        80.49 / 83.10 ±2.22 / 86.77 ms │         80.80 / 81.74 ±0.66 / 82.59 ms │     no change │
│ QQuery 96 │        24.83 / 25.62 ±1.26 / 28.13 ms │         24.31 / 24.52 ±0.24 / 24.92 ms │     no change │
│ QQuery 97 │        47.86 / 48.80 ±0.87 / 50.40 ms │         46.35 / 47.14 ±0.48 / 47.84 ms │     no change │
│ QQuery 98 │        42.19 / 43.65 ±1.42 / 45.93 ms │         42.27 / 43.24 ±0.69 / 43.99 ms │     no change │
│ QQuery 99 │        69.99 / 70.59 ±0.41 / 71.08 ms │         70.78 / 71.49 ±0.48 / 72.12 ms │     no change │
└───────────┴───────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 10209.53ms │
│ Total Time (feat_rows-backed-group-column)   │ 10332.65ms │
│ Average Time (HEAD)                          │   103.13ms │
│ Average Time (feat_rows-backed-group-column) │   104.37ms │
│ Queries Faster                               │          7 │
│ Queries Slower                               │          9 │
│ Queries with No Change                       │         83 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 234.3s
CPU sys 5.8s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 55.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 234.5s
CPU sys 5.7s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and feat_rows-backed-group-column
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃         feat_rows-backed-group-column ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.24 / 4.01 ±5.47 / 14.94 ms │          1.22 / 3.96 ±5.35 / 14.65 ms │     no change │
│ QQuery 1  │        12.52 / 13.25 ±0.39 / 13.58 ms │        12.74 / 13.10 ±0.19 / 13.28 ms │     no change │
│ QQuery 2  │        36.26 / 36.72 ±0.52 / 37.65 ms │        36.40 / 36.84 ±0.31 / 37.31 ms │     no change │
│ QQuery 3  │        30.95 / 31.87 ±1.00 / 33.64 ms │        30.86 / 31.19 ±0.22 / 31.54 ms │     no change │
│ QQuery 4  │     223.87 / 232.52 ±7.46 / 242.10 ms │     222.02 / 229.96 ±5.70 / 239.56 ms │     no change │
│ QQuery 5  │    273.07 / 282.48 ±10.54 / 302.95 ms │     267.04 / 272.61 ±4.05 / 278.80 ms │     no change │
│ QQuery 6  │           1.33 / 1.50 ±0.21 / 1.89 ms │           1.28 / 1.44 ±0.23 / 1.89 ms │     no change │
│ QQuery 7  │        14.51 / 14.91 ±0.26 / 15.27 ms │        14.09 / 14.32 ±0.13 / 14.48 ms │     no change │
│ QQuery 8  │    356.65 / 376.86 ±10.93 / 386.99 ms │    325.30 / 337.88 ±13.43 / 357.22 ms │ +1.12x faster │
│ QQuery 9  │    481.66 / 506.61 ±14.36 / 522.49 ms │     455.55 / 464.23 ±7.66 / 476.84 ms │ +1.09x faster │
│ QQuery 10 │        75.85 / 78.08 ±3.44 / 84.89 ms │        70.19 / 71.50 ±1.10 / 73.23 ms │ +1.09x faster │
│ QQuery 11 │        81.65 / 84.39 ±2.20 / 86.93 ms │        81.53 / 82.52 ±0.58 / 83.33 ms │     no change │
│ QQuery 12 │    280.13 / 302.08 ±14.32 / 320.02 ms │     269.55 / 273.87 ±4.63 / 281.72 ms │ +1.10x faster │
│ QQuery 13 │    382.66 / 414.25 ±19.06 / 434.39 ms │    364.34 / 374.83 ±10.91 / 392.38 ms │ +1.11x faster │
│ QQuery 14 │    295.97 / 309.99 ±12.01 / 330.88 ms │     287.00 / 292.90 ±7.11 / 305.71 ms │ +1.06x faster │
│ QQuery 15 │    277.57 / 314.14 ±22.85 / 341.07 ms │     266.83 / 276.38 ±9.15 / 293.14 ms │ +1.14x faster │
│ QQuery 16 │    648.41 / 670.19 ±20.44 / 703.96 ms │     618.09 / 625.19 ±6.05 / 636.30 ms │ +1.07x faster │
│ QQuery 17 │    624.76 / 660.37 ±21.06 / 685.58 ms │    628.75 / 654.34 ±16.00 / 672.88 ms │     no change │
│ QQuery 18 │ 1307.67 / 1349.95 ±33.33 / 1405.68 ms │ 1386.13 / 1417.91 ±30.38 / 1475.82 ms │  1.05x slower │
│ QQuery 19 │        28.05 / 28.38 ±0.47 / 29.29 ms │      29.18 / 46.57 ±31.17 / 108.84 ms │  1.64x slower │
│ QQuery 20 │    517.49 / 526.97 ±10.13 / 545.17 ms │     530.98 / 540.44 ±5.24 / 546.16 ms │     no change │
│ QQuery 21 │     513.10 / 525.02 ±9.03 / 537.42 ms │     531.49 / 538.85 ±5.96 / 545.61 ms │     no change │
│ QQuery 22 │  985.14 / 1013.47 ±23.97 / 1049.30 ms │  1016.30 / 1023.95 ±6.13 / 1030.34 ms │     no change │
│ QQuery 23 │ 3090.41 / 3167.09 ±45.45 / 3225.09 ms │ 3120.45 / 3172.17 ±44.34 / 3236.97 ms │     no change │
│ QQuery 24 │        40.98 / 48.40 ±9.80 / 65.59 ms │        40.84 / 41.96 ±0.94 / 43.37 ms │ +1.15x faster │
│ QQuery 25 │     111.43 / 118.74 ±6.72 / 130.24 ms │     111.53 / 112.59 ±0.88 / 113.93 ms │ +1.05x faster │
│ QQuery 26 │        41.27 / 43.91 ±3.56 / 50.76 ms │        41.70 / 46.19 ±4.30 / 54.06 ms │  1.05x slower │
│ QQuery 27 │     670.58 / 677.93 ±6.87 / 686.68 ms │     679.19 / 688.53 ±8.54 / 704.28 ms │     no change │
│ QQuery 28 │ 3073.09 / 3147.75 ±39.25 / 3186.45 ms │ 3049.49 / 3066.04 ±12.72 / 3081.10 ms │     no change │
│ QQuery 29 │       41.29 / 50.05 ±16.54 / 83.10 ms │       41.46 / 56.07 ±15.14 / 76.05 ms │  1.12x slower │
│ QQuery 30 │    313.99 / 334.41 ±13.13 / 348.42 ms │    310.87 / 319.72 ±10.58 / 340.38 ms │     no change │
│ QQuery 31 │     292.78 / 306.02 ±7.29 / 314.01 ms │     288.93 / 298.26 ±6.47 / 308.98 ms │     no change │
│ QQuery 32 │  979.55 / 1007.92 ±18.23 / 1027.51 ms │  954.69 / 1023.64 ±35.78 / 1053.97 ms │     no change │
│ QQuery 33 │ 1488.48 / 1549.72 ±58.88 / 1661.67 ms │ 1558.48 / 1654.84 ±59.09 / 1715.30 ms │  1.07x slower │
│ QQuery 34 │ 1504.32 / 1550.39 ±36.47 / 1611.62 ms │ 1532.48 / 1607.68 ±63.89 / 1722.66 ms │     no change │
│ QQuery 35 │    280.15 / 310.64 ±30.21 / 349.10 ms │    286.51 / 378.00 ±99.47 / 527.25 ms │  1.22x slower │
│ QQuery 36 │        68.50 / 71.96 ±2.72 / 76.79 ms │        64.85 / 71.09 ±5.45 / 80.02 ms │     no change │
│ QQuery 37 │        38.42 / 46.04 ±4.42 / 50.61 ms │        35.32 / 41.01 ±9.78 / 60.54 ms │ +1.12x faster │
│ QQuery 38 │        41.59 / 45.57 ±2.78 / 49.74 ms │        42.49 / 46.40 ±2.48 / 49.29 ms │     no change │
│ QQuery 39 │     159.47 / 167.57 ±5.70 / 176.46 ms │     145.45 / 152.11 ±6.55 / 163.97 ms │ +1.10x faster │
│ QQuery 40 │        14.02 / 14.47 ±0.27 / 14.77 ms │        14.05 / 15.50 ±1.66 / 18.35 ms │  1.07x slower │
│ QQuery 41 │        14.53 / 19.15 ±5.61 / 26.88 ms │        14.78 / 15.14 ±0.32 / 15.72 ms │ +1.27x faster │
│ QQuery 42 │        13.06 / 13.39 ±0.26 / 13.69 ms │        13.96 / 14.36 ±0.22 / 14.62 ms │  1.07x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 20469.11ms │
│ Total Time (feat_rows-backed-group-column)   │ 20446.07ms │
│ Average Time (HEAD)                          │   476.03ms │
│ Average Time (feat_rows-backed-group-column) │   475.49ms │
│ Queries Faster                               │         13 │
│ Queries Slower                               │          8 │
│ Queries with No Change                       │         22 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 12.1 GiB
Avg memory 4.2 GiB
CPU user 1046.8s
CPU sys 73.8s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.0s
Peak memory 11.5 GiB
Avg memory 4.6 GiB
CPU user 1042.1s
CPU sys 75.2s
Peak spill 0 B

File an issue against this benchmark runner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

physical-plan Changes to the physical-plan crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants